using System;
using System.Threading;
using System.Threading.Tasks;

namespace AsyncTest
{
    /// <summary>
    /// 同步异步
    /// </summary>
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("主线程测试开始..");
            AsyncMethod();
            // 同步延迟，只能在同步方法中使用，实质是线程休眠
            Thread.Sleep(1000);
            Console.WriteLine("主线程测试结束..");
            // 如果没有这一步，主方法执行完直接退出程序了，异步方法就没法执行完毕
            Console.ReadLine();
        }

        static async void AsyncMethod()
        {
            Console.WriteLine("开始异步代码");
            var result = await MyMethod();
            Console.WriteLine("异步代码执行完毕");
        }

        static async Task<int> MyMethod()
        {
            for (int i = 0; i < 5; i++)
            {

                Console.WriteLine("异步执行" + i.ToString() + "..");
                // 异步延迟，只能在异步方法中使用，实质是创建了一个给定时间的任务，源码是一个包装在任务里的定时器
                await Task.Delay(1000); //模拟耗时操作
            }
            return 0;
        }
    }
}
